﻿/**
 * @author sminutoli
 * version 1.1
 * ordena mensajes
 * ARREGLADO! BUG: la funcion orderByDate anda para el orto
 */
import com.dinmax.flash.central.extension.message.Message
import com.dinmax.flash.utilities.array.ArrayUtils

class com.dinmax.flash.central.extension.message.MessageUtils {
	
	public static function orderMessages(msgs:Array):Array {
		
		var a:Array = orderByDate(getMessagesByState(msgs, Message.NEW));
		var b:Array = orderByDate(getMessagesByNotState(msgs, Message.NEW));
		var c:Array = new Array();
		for (var i : Number = 0; i < a.length; i++) {
			if(a[i] != undefined){
				c.push(a[i]);
			};
		};
		for (var i : Number = 0; i < b.length; i++) {
			if(b[i] != undefined){
				c.push(b[i]);
			};
		};
		
		return c;
	};
	
	public static function getMessagesByState(msgs:Array, state:String):Array {
		var a:Array = new Array();
		for (var i : Number = 0; i <  msgs.length; i++) {
			var msg:Message = msgs[i];
			if(msg.getState() == state){
				a.push(msg);
			};
		}
		return a;
	};
	
	public static function getMessagesByNotState(msgs:Array, state:String):Array {
		var a:Array = new Array();
		for (var i : Number = 0; i <  msgs.length; i++) {
			var msg:Message = msgs[i];
			if(msg.getState() != state){
				a.push(msg);
			};
		}
		return a;
	};
		
	
	public static function orderByDate(msgs:Array):Array {
		var newArray:Array = new Array();
		//var workArray:Array = ArrayUtils.duplicateArray(msgs);
		var workArray:Array = msgs;
		
		//mientras que el array tenga items dentro voy corriendo de lugar al más viejo				
		while(workArray.length > 0) {
			newArray.unshift(getOlder(workArray));
		};
		
				
		return	newArray;
	};
	
	private static function getOlder(msgs:Array):Message {
		var msg:Message;
		for(var i:Number=0; i < msgs.length; i++){
			var check:Boolean = Message(msgs[i]).getTime().getTime() < msg.getTime().getTime();
			if(msg == undefined || check) {
				msg = msgs[i];
			};
		};
		ArrayUtils.removeItem(msgs, msg);
		return msg;
	};
				
};